/**
第一题：扑克加法的实现
【问题描述】
假设J老师拥有n张扑克牌，那么他可以用这些卡片来记录一个非常大的数字，规则如下，用2-10的卡片代替数字，J代替11，
Q代替12，K代替13，A代替14，X（大小王）代替0， 现在输入两个字符串，每输入一张牌(牌型包括所有的扑克种类)就空一格，输入两组字符串数据来表示两组数字，每输入一个字符串就换一行，请输出两个数字相加后的结果。假如任意一组数据第一位出现X ，则直接输出false，
格式如下：
A J 10 9 8 7 6 5 4 3 2 K 代表的数字是1411109876543213
Q J 10 9 8 7 6 5 4 3 2 A 代表的数字是1211109876543214
则输出的结果为
2622219753086427

第二组样例
A A A A A A A A A A A A A A X 10
A A A A A A A A A A A A A A X J
2828282828282828282828282828021
**/
#include <bits/stdc++.h>

using namespace std;
int a[100000000], b[100000000], len, len1, len2;
string s1, s2;

void init() {
    len1 = s1.size();
    for (int i = len1 - 1, j = 0; i >= 0; i--, j++) {
        if (s1[i] == 'J')a[j] = 11;
        if (s1[i] == 'Q')a[j] = 12;
        if (s1[i] == 'K')a[j] = 13;
        if (s1[i] == 'A')a[j] = 14;
        if (s1[i] == 'X')a[j] = 0;
        else a[j] = s1[i] - '0';
    }
    len2 = s2.size();
    for (int i = len2 - 1, j = 0; i >= 0; i--, j++) {
        if (s2[i] == 'J')b[j] = 11;
        if (s2[i] == 'Q')b[j] = 12;
        if (s2[i] == 'K')b[j] = 13;
        if (s2[i] == 'A')b[j] = 14;
        if (s2[i] == 'X')b[j] = 0;
        else b[j] = s2[i] - '0';
    }
}

int add() {
    len = max(len1, len2) + 1;
    for (int i = 0; i < len; i++) {
        a[i] += b[i];
        a[i + 1] += a[i] % 10;
        a[i] %= 10;
    }
    while (a[len - 1] == 0)len--;
    for (int i = len - 1; i >= 0; i--)cout << a[i];
}

int main() {
    getline(cin, s1);
    getline(cin, s2);
    if (s1[0] == 'X' || s2[0] == 'X') {
        cout << "false";
        return 0;
    }
    init();
    add();
    return 0;
}
